In packet-oriented communications, packets traversing a communications fabric may represent messages belong to multiple message classes (sometimes known as ordering classes, flow control classes, or virtual channels). One example of a physical communication channel bearing multiple message classes includes PCI Express, although there are many other such channels. Message classes exist if different streams of messages share a common fabric, yet have different flow control, ordering, or passing restrictions or requirements.
A single message class may have ordering constraints within itself. For example, the preservation of strict ordering or the prohibition of passing based upon some packet-specific criterion such as a conflict of their associated protocol-layer addresses. In addition to ordering constraints within a message class, there may be ordering restrictions and passing restrictions or independence requirements between message classes.
Passing restrictions or independence requirements within or between message classes may arise for various reasons. They may be required to avoid deadlock, to correctly support a data coherency or consistency model, or to allow for performance optimizations. In some cases, passing of packets in one class by those in another may be required under some circumstances for correct operation yet undesirable in general for performance.